home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / editor / wink10.zip / WINK10.SCR < prev   
Text File  |  1997-04-24  |  65KB  |  1 lines

  1. ( Wink v1.0, 970424 + )                                                                                                         2001 LOAD                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       EXIT                                                                                                                            Copyright (c) 1994-7 Leo Wong.  All rights reserved.            hello@albany.net                                                http://www.albany.net/~hello/                                                                                                   ( stand alone + )                                               ( headless requires changes to PYGMY scr # 83)                  ( $C000 SET-EDGE)                                               ( { 112 132 THRU } ( assembler)                                 ( HEADERS OFF)                                                  CREATE TASK                                                     2002 LOAD                                                                                                                       EXIT                                                            ' WINK-BOOT IS BOOT                                             ' WINK-ABORT IS ABORT                                           HEADERS ON                                                      PRUNE                                                                                                                           SAVE WINK10.COM                                                                                                                 ( pygmy extensions + )                                          143 144 THRU  ( l words)                                        " DIRECT.SCR" 4 OPEN                                            4002 4005 THRU  4 ?CLOSE                                        152 LOAD      ( LCMOVE)                                         153 LOAD      ( PEMIT--but not >SCR)                            164 LOAD      ( SCROLL-UP, SCROLL-DOWN)                         169 LOAD      ( command line)                                   171 173 THRU  ( shell)                                          2003 2062 THRU                                                                                                                  EXIT                                                            : .ATTR  ( n)  CUR@ ROT SPACES AT ;                                                                                                                                                                                                                             ( code words + )                                                CODE TUCK   AX POP, BX PUSH, AX PUSH, NXT, END-CODE             CODE -ROT   AX POP, DX POP, BX PUSH, DX PUSH,                      AX BX MOV,  NXT,  END-CODE                                   CODE 2SWAP   AX POP, CX POP, DX POP,                               AX PUSH, BX PUSH, DX PUSH,  CX BX MOV, NXT, END-CODE         CODE 2PUSH   AX POP, SWITCH, BX PUSH, AX PUSH, SWITCH,             BX POP, NXT, END-CODE                                        CODE 2POP   BX PUSH, SWITCH, AX POP, BX POP, SWITCH,               AX PUSH, NXT, END-CODE                                       CODE 2+   BX INC, BX INC,  NXT, END-CODE                        CODE <!  ( a n)  BX AX MOV,  BX POP,  AX 0 [BX] MOV,               BX POP,  NXT, END-CODE                                       CODE SWAP-  ( n1 n2 - n2-n1)  AX POP, AX BX SUB, NXT, END-CODE                                                                                                                                  ( LC@+ from Pygtools + )                                        CODE LC@+  ( seg offset -- seg offset+1 c)                        ( offset already in BX) ES POP, ( seg)    ES PUSH,              ES: 0 [BX] AL MOV, ( retrieve c)   BX INC,  BX PUSH,            AL BL MOV,   BH BH SUB,    NXT,    END-CODE                                                                                   ( 'BL and 'CR + )                                               13 CONSTANT 'CR                                                 32 CONSTANT 'BL                                                 CODE CR=  ( c - f)  13 #, BX SUB,                                   1 #, BX SUB,  BX BX SBB,  NXT, END-CODE                     CODE BL=  ( c - f)  32 #, BX SUB,                                   1 #, BX SUB,  BX BX SBB,  NXT, END-CODE                     CODE BL=<  ( c - f)  33 #, BX SUB,  BX BX SBB,  NXT, END-CODE                                                                                                                                   ( tools 1 + )                                                   CODE INCR  ( a)  0 [BX] W-PTR INC, BX POP,  NXT, END-CODE       CODE INCR@  ( a - n)  0 [BX] W-PTR INC, 0 [BX] BX MOV,  NXT,       END-CODE                                                     CODE DECR  ( a)  0 [BX] W-PTR DEC, BX POP, NXT, END-CODE        CODE DECR@  ( a - n)  0 [BX] W-PTR DEC, 0 [BX] BX MOV,  NXT,       END-CODE                                                     CODE +1-1  ( n m - n+1 m-1)  BX DEC,                               AX POP,  AX INC, AX PUSH,  NXT, END-CODE                     : 3DROP   2DROP DROP ;                                          : UMAX   2DUP U< IF  NIP  ELSE  DROP  THEN ;                    : UMIN   2DUP U< IF  DROP  ELSE  NIP  THEN ;                    : CLAMP  ( n lo hi - n')  ROT MIN MAX ;                         : ACCEPT  ( a u - u')  EXPECT SPAN @ ;                                                                                                                                                          ( tools 2 + )                                                   : CRs  ( n)  FOR  CR  NEXT ;                                    : BEEP   7 EMIT ;                                               : DEEP  ( n)  DROP BEEP ;                                       : WAIT   ." Press a key to continue..." KEY DROP ;              CREATE table  128 ALLOT                                         : TABLE  0 table 128 FOR 2DUP C! 1+ 1 +UNDER NEXT 2DROP ;       : >table  table 'A +  26                                           FOR DUP C@ $20 OR OVER C! 1+ NEXT DROP ;                     : TAble   TABLE >table ;                                        CODE lcase  ( a u>0)  BX CX MOV,  table #, BX MOV,  DI POP,        BEGIN,  0 [DI] AL MOV, XLAT, AL 0 [DI] MOV, DI INC, LOOP,               BX POP,  NXT, END-CODE                                                                                                                                                                                                                               ( tools 3 + )                                                   EXIT                                                            : C>c  ( C - c)  DUP 'A 'Z BETWEEN 'BL AND XOR ;                : lcase  ( a u)  FOR  C@+ C>c  OVER 1- C!  NEXT  DROP ;         CODE C>c  ( C - c)  BL AL MOV,  table #, BX MOV, XLAT,             AL BX MOV,  BH BH SUB,  NXT, END-CODE                        CODE CC>cc  ( CC - cc)  BX CX MOV,  table #, BX MOV,              CL AL MOV, XLAT, AL CL MOV,  CH AL LMOV, XLAT, AL CH MOV,       CX BX MOV,  NXT, END-CODE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ( vectored execution + )                                        VARIABLE mode                                                   CODE CALL  ( a n)  1 #, BX SHL,  AX POP, AX BX ADD,                0 [BX] AX MOV,  BX POP,  AX JMP,  NXT, END-CODE              : MODE  ( n)  CREATE  FOR  ' ,  NEXT                               DOES>  mode @  CALL ;                                        : Special  ( c key# a)  -ROT - CALL ;                                                                                           EXIT                                                            : CALL  ( a n)  2* + @ EXECUTE ;                                : DIAL:   :                                                        DOES>  ( n)  SWAP CALL ;                                                                                                                                                                                                                                                                                                     ( strings + )                                                   : TRAILING<>  ( a u c - a1 u1)  OVER PUSH -TRAILING<>              DUP +UNDER  POP  SWAP- ;                                     : -PATH  ( a u - a' u')  '\ TRAILING<>  ': TRAILING<> ;         : -LEADING  ( a u - a' u')  'BL -LEADING= ;                     : PEEL  ( a u - a' u')  -LEADING -TRAILING ;                    : C+!  ( n a)  DUP C@ +UNDER C! ;                               : S+!  ( a u s)  2DUP 2PUSH  COUNT + SWAP CMOVE 2POP C+! ;      : SMOVE  ( s1 s2)  OVER C@ 1+ CMOVE ;                                                                                           EXIT                                                            CODE -TRAILING<>  ( a # c - a #')  STD,  1 #, AL OR,               DS AX MOV,  AX ES MOV,  BX AX MOV,  CX POP,  DI POP,            DI PUSH,  CX DI ADD,  DI DEC,  REPNZ, AL SCAS,                  0=, IF, CX INC, THEN,  CX BX MOV,  CLD,  NXT, END-CODE                                                                       ( cursor words from Pygtools + )                                CODE VBIOS ( DX CX BX AX -- DX' CX' BX' AX' )                   ( general call to the video bios )                                BX AX MOV, BX POP, CX POP, DX POP,   SI PUSH, BP PUSH,          $10 INT,   BP POP, SI POP,   DX PUSH, CX PUSH, BX PUSH,         AX BX MOV,   NXT, END-CODE                                    : VCMD ( DX CX BX AX -)   VBIOS   2DROP 2DROP ;                 : >CURSOR ( n-)  0 TUCK  $100 VCMD ;  ( Set Cursor Size )       : -CURSOR ( -- )  0 $2007 0 $100 VCMD ;  ( Turn cursor off )                                       ( $007 =Big Block Cursor)    : SMALL   $607 >CURSOR ;           ( $607 =Normal cursor)       : BIGGER  $407 >CURSOR ;           ( $407 =Box Cursor)          3 MODE +CURSOR  SMALL BIGGER SMALL                                                                                                                                                                                                                              ( cursor positioning + )                                        : ROW  ( - u)  CUR@  DROP ;                                     : COL  ( - u)  CUR@  NIP ;                                      : CAT  ( u)  ROW SWAP AT ;                                                                                                      EXIT                                                            : RAT  ( u)  COL AT ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ( screen/page + )                                               24 CONSTANT STATUS                                               2 CONSTANT TOP       5 CONSTANT LEFT                            5 CONSTANT TABWIDTH                                            STATUS TOP - CONSTANT LMAX/SCREEN                               50 CONSTANT LINES/PAGE                                          60 CONSTANT PICA     11 CONSTANT PMARGIN                        70 CONSTANT ELITE    14 CONSTANT EMARGIN                        DEFER LINEWIDTH  ' PICA IS LINEWIDTH                            DEFER MARGIN     ' PMARGIN IS MARGIN                            TOP LMAX/SCREEN + 1- CONSTANT BOTTOM                            : RIGHT   LEFT LINEWIDTH + 1+ ;                                                                                                                                                                                                                                                                                                 ( text/block + )                                                ( -1 CONSTANT TMAX)                                             VARIABLE tsize                                                  VARIABLE cnow                                                   VARIABLE cold                                                   VARIABLE topline                                                VARIABLE oldtop                                                 VARIABLE lnow                                                   VARIABLE lold                                                   VARIABLE lend                                                   : -TEND  ( - f)  cnow @ tsize @ SWAP- ;                         : ROOM?  ( u - f)  tsize @ OVER + 1+ U< ;                                                                                                                                                                                                                                                                                       ( lines 1 + )                                                   512 CONSTANT GULP  ( used in sweep and read)                    5000 CONSTANT LMAX                                              : LINES  ( - a)  PAD GULP + ;                                   : LINE  ( # - a)  2* LINES + ;                                  : LINESPEC  ( l# - a u)  LINE 2@ TUCK - ;                       : LINELENGTH  ( l# - u)  LINESPEC NIP ;                         : 0LINES  ( l#1 l#2)  OVER  LINE                                   -ROT  SWAP- 1+ 0 MAX 2*  0 FILL ;                            : 0>LMAX   0 LMAX 1- 0LINES ;                                                                                                                                                                                                                                                                                                                                                                                                                                   ( lines 2 + )                                                   : LINES+!  ( n)  lnow @ 1+ DUP  LINE SWAP                          lend @  SWAP-  1+  0 MAX FOR  2DUP +!  2+ NEXT  2DROP ;      : LINES>  ( l#)  DUP LINE DUP 2+                                   ROT lend INCR@ SWAP- 2* 0 MAX CMOVE> ;                       : <LINES  ( l#)  1+ DUP LINE DUP 2+ SWAP                           ROT lend @ SWAP- 2* 0 MAX CMOVE  lend DECR ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ( char#>line#>row# + )                                          : C>L  ( c# l# - l#')  OVER tsize @ U< NOT                         IF  2DROP lend @                                                ELSE  OVER                                                         IF  1- LINE                                                         BEGIN  2+ 2DUP @  U< UNTIL  NIP  LINES - 2/ 1-              ELSE  DROP  THEN THEN ;                                   : >ROW  ( l# - u)  topline @ - TOP + ;                          : BOTTOMLINE  ( - u)  topline @ LMAX/SCREEN + 1- ;              : AIM  ( cnow n )  SWAP  0 C>L  lnow N!                            DUP topline @ BOTTOMLINE BETWEEN                                IF  2DROP                                                       ELSE  SWAP- 0 MAX topline N!  lnow !  THEN ;                                                                                                                                                                                                                 ( virgin mother + )                                             : MOTHER   0>LMAX  0 cnow N!  lnow N!  lend N!  topline ! ;     : VIRGIN   MOTHER  tsize OFF ;                                                                                                  ( segments + )                                                  VARIABLE tseg                                                   VARIABLE bseg                                                   : SEGS   CS@ $1000 + tseg N!  $1000 + bseg ! ;                  : TSEG  ( - seg)  tseg @ ;                                      : BSEG  ( - seg)  bseg @ ;                                      : SPOT  ( - tseg a)  TSEG cnow @ ;                              : SPOT@  ( - c)  SPOT LC@ ;                                     : T>PAD  ( seg a u - pad u)  PUSH  CS@ PAD R@ LCMOVE  PAD POP ;                                                                                                                                                                                                 ( screen display 1 +)                                           $74 CONSTANT RED-ON-GRAY    $71 CONSTANT BLUE-ON-GRAY           $17 CONSTANT GRAY-ON-BLUE                                       $07 CONSTANT GRAY-ON-BLACK  $70 CONSTANT BLACK-ON-GRAY          CREATE text  GRAY-ON-BLUE ,  BLACK-ON-GRAY ,                    VARIABLE frame  RED-ON-GRAY frame !                             : COLOR  ( a)  @ ATTR ! ;                                       : DOS-COLOR   GRAY-ON-BLACK ATTR ! ;                            : MONO?   VSEG @ $B000 = ;                                      : ?MONO   MONO?                                                    IF  BLACK-ON-GRAY  GRAY-ON-BLACK  text 2!                           BLACK-ON-GRAY  frame !  THEN ;                           : BOW   SMALL DOS-COLOR CLS ;                                                                                                                                                                                                                                   ( screen display 2 +)                                           : RUB  ( r)  0 2DUP AT CR AT ;                                  : .RULER  text COLOR  TOP 1-  DUP RUB                              ." Line |" LINEWIDTH TABWIDTH / FOR ." ----+" NEXT              COL 1- AT ." |Page" ;                                        : .FKEYS  frame COLOR  0 RUB                                       ." F1 Find  2 Next  3 Put  4 Also  5 Mark  "                    ." 6 Cut  7 Copy  8 Paste  9 Print  10 Bye " ;               : .SCREEN   text COLOR  CLS                                        frame COLOR  0 RUB  STATUS RUB                                  text COLOR  BOTTOM RUB                                          .FKEYS  .RULER  TOP LEFT AT ;                                : WARNING ( s)  BEEP  0 RUB  TYPE$  SPACE  WAIT ;                                                                                                                                                                                                               ( text display 1 + )                                            DEFER "cr"  ' 'BL IS "cr"                                       DEFER "bl"  ' 'BL IS "bl"                                       250 CONSTANT .BL           20 CONSTANT .CR                      : ~DISPLAY   "cr" 'BL XOR                                          IF  ['] 'BL DUP IS "bl"  IS "cr"                                ELSE  ['] .BL IS "bl"  ['] .CR IS "cr"  THEN  oldtop ON ;    : ?DISPLAY  ( c - 'c)  DUP BL=<                                    IF  'BL XOR IF  "cr"  ELSE  "bl"  THEN  THEN ;                                                                               DEFER ?MARK  ' NOP IS ?MARK                                                                                                                                                                                                                                                                                                                                                                     ( text display 2 + )                                            VARIABLE .start                                                 VARIABLE .end                                                   VARIABLE wipe                                                   : EraseEOL   CUR@ CR AT ;                                       : EraseEOS   ROW BOTTOM SWAP- 1+ CRs ;                          : TTYPE  ( seg a u)                                                FOR  LC@+  ?DISPLAY ?MARK EMIT  NEXT  2DROP                     text COLOR EraseEOL ;                                        : .LINE#  ( l#)  1+ 4 U.R ;                                     : PAGE  ( l# - p# n)  LINES/PAGE U/MOD 1+ SWAP ;                : .PAGE  ( l#)  PAGE                                               IF  DROP                                                        ELSE  LEFT LINEWIDTH + 2+ CAT  2 U.R  THEN ;                                                                                                                                                 ( text display 3 + )                                            : .TLINE  ( l# seg l# - l#)  DUP .LINE# SPACE                      LINESPEC TTYPE  DUP .PAGE CR ;                               : .TLINES   text COLOR  TSEG  .start @  topline @ MAX              DUP >ROW 0 AT DUP .end @ BOTTOMLINE MIN SWAP-  1+               FOR  2DUP .TLINE  1+ NEXT  2DROP                                lend @ BOTTOMLINE U<                                            IF  topline @ lend @ SWAP-  1+ TOP + 0 AT CR                        wipe @ IF  EraseEOS  THEN THEN ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ( status display 1 + )                                          VARIABLE col#                                                   : .FILENAME  frame COLOR  STATUS 0 AT                               ARG$ COUNT -PATH TUCK TYPE  14 SWAP- SPACES ;               : .OF  ( u s)  TYPE$  2+ DUP SPACES " of" TYPE$ 1+ SPACES ;     : .STATUSLINE   .FILENAME                                           5 " Char" .OF                                                     " Col"  TYPE$  5 SPACES                                       4 " Line" .OF                                                   2 " Page" .OF ;                                                                                                             : .INSERT     ." Ins" ;                                         : .OVERWRITE  ." Ovr" ;                                         : .MARK       ." Mrk" ;                                         3 MODE .MODE  .INSERT .OVERWRITE .MARK                                                                                          ( status display 2 + )                                          : U.L  ( u #)  SWAP  <# #S OVER PUSH #>  POP - SPACES ;         : .STATUS   frame COLOR                                             STATUS PUSH                                                     R@  19 AT  cnow @ 1+ 5 U.L                                      R@  28 AT  tsize @   5 U.L                                      R@  39 AT  col# @ 1+ 2 U.L                                                 lend @ lnow @ 2DUP                                   R@  48 AT  1+ 4 U.L                                             R@  56 AT  1+ 4 U.L                                             R@  67 AT  PAGE DROP 3 U.L                                      R@  73 AT  PAGE DROP 3 U.L                                      POP 76 AT  .MODE ;                                                                                                                                                                                                                                          ( right, left, up, down + )                                     : Right   -TEND IF  cnow INCR  ELSE  BEEP  THEN ;               : Left   cnow @ IF  cnow DECR  ELSE  BEEP  THEN ;               : CPLACE  ( - #)  lnow @ LINE @  cnow @ SWAP- ;                 : >CNOW  ( cplace l#)  LINESPEC  ROT 2DUP U<                       IF  DROP  1-  0 MAX  ELSE  NIP  THEN  + cnow ! ;             : Up   lnow @                                                      IF  CPLACE lnow DECR@ >CNOW                                     ELSE  BEEP  THEN  ;                                          : Down   lnow @ lend @ U<                                          IF  CPLACE lnow INCR@ >CNOW                                     ELSE  BEEP  THEN  ;                                                                                                                                                                                                                                                                                                          ( tdown and tup + )                                             : PANE  ( u)  TOP MAX LEFT BOTTOM RIGHT 1 text @ ;              : TDOWN  ( u)  PANE SCROLL-DOWN                                    BOTTOMLINE lend @ U< NOT                                        IF  lend @ DUP >ROW 0 AT text COLOR                                 DUP .LINE# .PAGE  THEN ;                                 : TUP  ( u)  1+ PANE SCROLL-UP                                     lend @ BOTTOMLINE < NOT                                         IF  tsize @ lend @ 1+ LINE !                                        BOTTOM 0 AT                                                     BOTTOMLINE TSEG OVER  text COLOR .TLINE  DROP               THEN ;                                                                                                                                                                                                                                                                                                                       ( format 1 + )                                                  VARIABLE same                                                   VARIABLE line#                                                  : ?SAME  ( a 'line)  @ =                                           IF  line# @  lnow @  OVER U<                                        OVER LINELENGTH LINEWIDTH U<  AND AND ?DUP                      IF  .end !  same ON  THEN  THEN ;                        : LINE!  ( a)  line# INCR@  LINE  2DUP ?SAME ! ;                : CReturn  ( a)  line# @  DUP PUSH  1+ LINE @                      2DUP      U< IF  2DROP  R@ DUP LINES>                                            BOTTOMLINE U< IF  R@ >ROW TDOWN  THEN          ELSE SWAP U< IF  R@  DUP <LINES                                                  BOTTOMLINE U< IF  R@ >ROW TUP  THEN                         THEN THEN  POP DROP  ;                                                                                                                                                          ( format 2 + )                                                  : WRAP  ( a pad u - a')                                            2DUP 'CR -LEADING<>                                                IF  NIP SWAP- 1+ + DUP CReturn  DUP LINE!                       ELSE  DROP DUP LINEWIDTH 2+ =                                   IF  1- 'BL -TRAILING<>  ?DUP                                        IF  DUP LINEWIDTH >                                                 IF  2DUP + C@ BL= NEGATE +  THEN  NIP                       ELSE DROP LINEWIDTH  THEN +  DUP LINE!                      ELSE  NIP +  THEN THEN ;                                  : DEJA?   same @                                                   IF  lend DUP @ line# @ 1- MAX <!                                   tsize @ lend @ 1+ LINE !                                     ELSE  lend @ 1+ line# @  lend N!  .end N!                          1+ tsize @ OVER LINE !  1+ SWAP 0LINES  THEN ;                                                                            ( format 3 + )                                                  : FORMAT  same OFF  TSEG lnow @ 1- 0 MAX                           .start N! .end N!  line# N!  LINE @                             BEGIN  2DUP DUP DUP LINEWIDTH 2+ + tsize @ UMIN                    SWAP- T>PAD WRAP                                                DUP tsize @ = same @ OR UNTIL  2DROP  DEJA? ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ( text pushes and pulls + )                                     : #>END  ( a - u)  tsize @  SWAP- ;                             : JOIN  ( u)  PUSH SPOT 2DUP POP + DUP #>END PUSH 2SWAP POP        LCMOVE ;                                                     : <#SLIDE  ( u)  tsize @                                           IF  DUP JOIN  NEGATE tsize +!  ELSE  DEEP  THEN ;            : <SLIDE   1 <#SLIDE  -1 LINES+!  ;                             : SPLIT  ( u)  PUSH SPOT 2DUP POP OVER #>END PUSH + POP            LCMOVE> ;                                                    : #SLIDE>  ( u)  DUP ROOM?                                         IF  DUP SPLIT  tsize +!  ELSE  DEEP  THEN ;                  : SLIDE>   1 #SLIDE>  1 LINES+! ;                                                                                                                                                                                                                                                                                               ( text input + )                                                : OVERWRITE  ( c)  SPOT LC!                                        tsize DUP @ cnow INCR@ UMAX <!  FORMAT  ;                    : INSERT  ( c)  -TEND IF  SLIDE>  THEN  OVERWRITE ;                                                                             ( delete and backspace + )                                      : ?PARA   SPOT@  CR=  lnow @ BOTTOMLINE U<  AND                    IF  lnow @ <LINES  ROW TUP  THEN ;                           : DELETE   -TEND IF  ?PARA <SLIDE FORMAT  ELSE  BEEP  THEN ;    : <DELETE   cnow @ IF  Left DELETE  ELSE  BEEP  THEN ;                                                                                                                                                                                                                                                                                                                                                                                                          ( Enter + )                                                     : PARAGRAPH   lnow @ DUP  LINES>                                   BOTTOMLINE U< IF  ROW 1+ TDOWN  THEN  'CR INSERT ;           : RETURN   -TEND                                                   IF  lnow @ LINE @ cnow !  Down                                  ELSE  mode @ 2 XOR IF  PARAGRAPH  ELSE  BEEP  THEN THEN ;    3 MODE Enter  PARAGRAPH RETURN RETURN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ( Tab + )                                                       CREATE TAB$  HERE  TABWIDTH DUP  ALLOT  'BL FILL                : TAB  ( u)  DUP  ROOM?                                             IF  DUP PUSH #SLIDE>  CS@ TAB$ SPOT R@ LCMOVE                       POP  DUP LINES+!  cnow +!  FORMAT                           ELSE  DEEP  THEN ;                                          : tab ( u)  -TEND                                                  IF  cnow TUCK  @ +  lnow @ 1+ LINE @ 1- MIN  <!                 ELSE  mode @ 2 XOR IF  TAB  ELSE  DEEP  THEN THEN ;          3 MODE <tab>  TAB tab tab                                       : Tab  TABWIDTH  CPLACE OVER UMOD -  <tab> ;                                                                                                                                                                                                                                                                                                                                                    ( prev word + )                                                 ( bl includes ascii 32 and ascii 13 i.e. ascii 32 and lower)    : -BL  ( - f)  'BL SPOT@ U< ;                                   : BL<  ( u1 - u2)  1-                                              BEGIN  DUP  Left -BL  AND WHILE  1-  REPEAT ;                : -BL<  ( u1 - u2)  1-                                             BEGIN  DUP  Left -BL NOT  AND WHILE  1-  REPEAT ;            : PrevWord   cnow @ ?DUP                                           IF  BL<  DUP IF  -BL<  THEN  DUP IF  BL<  THEN  DROP                -BL NOT IF  Right  THEN  cnow @ 21 AIM                      ELSE  BEEP  THEN ;                                                                                                                                                                                                                                                                                                                                                                           ( next word + )                                                 ( bl includes ascii 32 and ascii 13 i.e. ascii 32 and lower)    : >BL  ( u1 - u2)  1-                                              BEGIN  DUP  Right -BL  AND WHILE  1-  REPEAT ;               : >-BL  ( u1 - u2)  1-                                             BEGIN  DUP  Right -BL NOT  AND WHILE  1-  REPEAT ;           : NextWord   -TEND ?DUP                                            IF  >BL  DUP  IF  >-BL  THEN  DROP                                  cnow @ 0 AIM  wipe ON                                       ELSE  BEEP  THEN ;                                                                                                                                                                                                                                                                                                                                                                                                                                           ( jumps 1 + )                                                   : CONFINE  ( #1 - #2)  0 lend @ CLAMP ;                         : JUMP  ( n)  DUP topline @ + CONFINE topline !                    CPLACE SWAP lnow @ + CONFINE lnow N! >CNOW  ;                : +JUMP  ( u)  lnow @ lend @ =                                     IF  DEEP  ELSE  JUMP THEN ;                                  : -JUMP  ( u)  lnow @ 0=                                           IF  DEEP  ELSE  NEGATE JUMP  THEN ;                          : Home   lnow @ LINE @ cnow ! ;                                 : End   lnow @ 1+ LINE @ 1- tsize @ UMIN cnow ! ;               : PgUp   LMAX/SCREEN -JUMP ;                                    : PgDn   LMAX/SCREEN +JUMP  wipe ON ;                                                                                                                                                                                                                                                                                           ( jumps 2 + )                                                   : Ctrl-Home   0 cnow N!  lnow N!  topline !   ;                 : Ctrl-End   tsize @  cnow !  lend @ lnow N!  .end N!              DUP topline @ LMAX/SCREEN + 1- >                                IF  1- .start N!  topline !  wipe ON                            ELSE  DROP  THEN ;                                           : Ctrl-PgUp   topline @ lnow @ U<                                  IF  CPLACE  topline @ lnow N!  >CNOW                            ELSE  BEEP  THEN ;                                           : Ctrl-PgDn   lnow @ DUP lend @ U< SWAP BOTTOMLINE U< AND          IF  CPLACE  lend @ BOTTOMLINE MIN lnow N!  >CNOW                ELSE  BEEP  THEN ;                                                                                                                                                                                                                                                                                                           ( cursor keys, ~insert + )                                      CREATE CURKEYS                                                   ] Home Up PgUp NOP Left NOP Right NOP End Down PgDn [          : CURKEY  ( c)  71 CURKEYS Special ;                            CREATE CTRL-CURKEYS                                              ] PrevWord NextWord Ctrl-End Ctrl-PgDn Ctrl-Home [             : CTRL-CUR  ( c)  115 CTRL-CURKEYS Special ;                    : ~INSERT  mode DUP @ 1 XOR <! ;                                3 MODE Insert  ~INSERT ~INSERT BEEP                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ( find/replace 1 + )                                            64 CONSTANT S/R-MAX                                             CREATE S$  S/R-MAX ALLOT                                        S$ 1+ CONSTANT S$+                                              VARIABLE slen                                                   VARIABLE slen<                                                  CREATE lastchar  1 ALLOT                                        VARIABLE found                                                  VARIABLE pad>                                                   VARIABLE rlen                                                   CREATE R$  S/R-MAX ALLOT                                                                                                                                                                                                                                                                                                                                                                        ( find/replace 2 + )                                            : UC?  ( a u - f)  FOR  C@+ 'A 'Z                                  BETWEEN IF POP 2DROP -1 EXIT THEN NEXT DROP 0 ;              : lc?  ( a u - f)  FOR  C@+ 'a 'z                                  BETWEEN IF POP 2DROP -1 EXIT THEN NEXT DROP 0 ;              : MIXED? ( a u - f) 2DUP UC? PUSH  lc?  POP AND ;               DEFER ?lcase                                                    : ?MIXED  ( a u)  2DUP MIXED?                                      IF  ['] 2DROP  ELSE  ['] lcase  THEN  IS ?lcase  ?lcase ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ( find/replace 3 + )                                            : -FOUND  ( a u - a+1 u-1|0)  +1-1                                  OVER  S$+ slen< @ COMP 0=                                       IF  OVER PAD - 1- pad> !  DROP 0  found ON  THEN ;          : LOOKING  ( a u)  S$ C@ PUSH                                      2DUP ?lcase  R@ -LEADING<> DUP                                    IF  lastchar C@ -TRAILING<> DUP                                     IF  BEGIN  -FOUND  R@ -LEADING<>  DUP 0= UNTIL            THEN THEN  POP 3DROP ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ( find/replace 4 + )                                            VARIABLE back                                                   VARIABLE snow                                                   VARIABLE gulp<                                                  : SWEEP  back ON  GULP slen< @ - gulp< !  tsize @ PUSH             TSEG  cnow @ 1+ DUP R@ 1+ slen @ - U< AND                       BEGIN  snow N!  2DUP  DUP DUP GULP +  R@ UMIN  DUP PUSH            SWAP- T>PAD LOOKING                                             POP R@ =  back @ AND                                               IF  DROP 0  back OFF  ELSE  gulp< @ +  THEN                  DUP cnow @ U<  back @ OR NOT  found @ OR                     UNTIL POP 3DROP ;                                                                                                                                                                                                                                                                                                            ( find/replace 5 + )                                            : ?FOUND   found @                                                  IF  snow @ pad> @ +  cnow N! cold N!  6 AIM  wipe ON            ELSE  BEEP  THEN ;                                          : SEEK   -CURSOR  found OFF  slen @ ?DUP                           IF tsize @ 1+ U<                                                   IF S$ slen @  2DUP ?MIXED                                          1- slen< N!  + C@ lastchar C!  SWEEP  THEN THEN           ?FOUND  +CURSOR ;                                            : SEEK?   0 RUB  ." Search for:"  S$ S/R-MAX ACCEPT  ?DUP          IF  slen !  SEEK  THEN  .FKEYS ;                                                                                                                                                                                                                                                                                                                                                             ( find/replace 6 + )                                            : POINT?  ( - f)  found @  cold @ cnow @ = AND ;                : SLIDE  ( n)  DUP 0<                                              IF  NEGATE <#SLIDE  ELSE  #SLIDE>  THEN ;                    : PUT   POINT?                                                     rlen @ DUP PUSH AND  R@ slen @ - TUCK  0 MAX ROOM? AND          IF  ?DUP IF  DUP SLIDE LINES+!  THEN                                CS@ R$ SPOT R@ LCMOVE  FORMAT                               ELSE  DEEP  THEN                                                POP DROP  found OFF ;                                        : PUT?   POINT?                                                    IF  0 RUB  ." Substitute:"  R$ S/R-MAX ACCEPT rlen !                PUT  .FKEYS                                                 ELSE  BEEP  found OFF  THEN ;                                                                                                                                                                ( find/replace 7 + )                                            3 MODE Find  SEEK? SEEK? BEEP                                   3 MODE Next  SEEK  SEEK  BEEP                                   3 MODE Swap  PUT?  PUT?  BEEP                                   3 MODE Also  PUT   PUT   BEEP                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ( block 1 + )                                                   VARIABLE bstart                                                 VARIABLE .bstart                                                VARIABLE .bend                                                  : BIN  ( a - u)  DUP @ tsize @ 1- UMIN SWAP N! ;                DEFER ?BLOCK  ' NOP IS ?BLOCK                                   : <BLOCK>   cnow BIN bstart @  2DUP UMIN .bstart ! UMAX .bend !    lold @ lnow @  2DUP MIN .start ! MAX .end !  ;               : <LL>  ( - l1 l2)  .bstart @ 0 C>L  .bend @ OVER C>L ;         : MARK  ( a c - a c)                                               OVER 1- .bstart @ .bend @ BETWEEN                               2 AND  text +  COLOR ;                                                                                                                                                                                                                                                                                                       ( block 2 + )                                                   VARIABLE was                                                    VARIABLE btop                                                   VARIABLE blength                                                : +MARK   mode DUP @ was ! 2 <!                                    ['] MARK IS ?MARK  ['] <BLOCK> IS ?BLOCK                        cnow BIN  bstart !  topline @ btop !  oldtop ON ;            : -MARK   <LL> .end ! .start !  was @ mode !                       ['] NOP DUP  IS ?MARK  IS ?BLOCK  ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ( cut, copy, paste + )                                          : APE   .bend @ .bstart @ TUCK  - 1+ blength !                     TSEG SWAP BSEG 0 blength @ LCMOVE  -MARK ;                   : CUT   APE  .bend @ .bstart @                                     DUP 0 C>L .start N!  lnow !  cnow N!                            - 1+ DUP <#SLIDE NEGATE LINES+!  FORMAT                         btop @ topline @ U<                                             IF  btop @ topline !  THEN  wipe ON  lend @ .end ! ;         : PASTE   blength @ DUP ROOM?                                      IF  DUP PUSH  #SLIDE>                                               BSEG 0 SPOT R@ LCMOVE  POP LINES+!  FORMAT                  ELSE  DEEP  THEN ;                                                                                                                                                                                                                                                                                                           ( some modes + )                                                3 MODE CHARACTER  INSERT  OVERWRITE DEEP                        3 MODE Backspace  <DELETE <DELETE   BEEP                        3 MODE Delete     DELETE  DELETE    CUT                                                                                         3 MODE ~Mark  +MARK +MARK -MARK                                 3 MODE Cut    BEEP  BEEP  CUT                                   3 MODE Copy   BEEP  BEEP  APE                                   3 MODE Paste  PASTE PASTE BEEP                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ( print 1 + )                                                   ( printer words from Pygtools + )                               CODE PBIOS  ( port svc - stat)  BX AX MOV,  DX POP,  $17 INT,      BH BH SUB,  AH BL MOV,  NXT,  END-CODE                       : PRN-STAT  ( port - stat)  $200 PBIOS ; ( LPT1=port 0)         : PRN-OK  ( - f)  0 PRN-STAT 144 = ;                                                                                            VARIABLE spacing                                                VARIABLE pline                                                  : SPACED  ( u)  spacing ! ;                                     : FF   12 EMIT ;                                                : .PAGE#  ( n)  MARGIN LINEWIDTH + SPACES 1+ . ;                                                                                                                                                                                                                                                                                ( print 2 + )                                                   : NEWPAGE  ( n)  FF  3 CRs  .PAGE#  3 CRs ;                     : ?NEWPAGE   pline @ ?DUP                                          IF  LINES/PAGE spacing @ /  U/MOD SWAP 0=                           IF  NEWPAGE  ELSE  DROP  THEN                               ELSE  6 CRs  THEN ;                                          : TPRINT  ( seg a u)                                               FOR  LC@+ DUP 'CR > AND EMIT  NEXT                              2DROP ;                                                      : <print>  ( start end)  PRN-OK                                    IF  -CURSOR  >PRN  pline OFF  TSEG -ROT  OVER - 1+                  FOR  ?NEWPAGE  MARGIN SPACES                                         2DUP LINESPEC TPRINT spacing @ CRs  pline INCR  1+         NEXT  2DROP  FF   >DIRECT                                   ELSE  2DROP " Printer not ready." WARNING  .FKEYS  THEN ;                                                                    ( print 3 + )                                                   : print  ( n)  0 lend @ <print> ;                               : bprint  ( n)  <LL> <print> ;                                  : PRINT   1 SPACED print ;                                      : BPRINT  1 SPACED bprint ;                                     : 2PRINT  2 SPACED print ;                                      : 2BPRINT 2 SPACED bprint ;                                     3 MODE Print   PRINT  PRINT  BPRINT                             3 MODE 2Print  2PRINT 2PRINT 2BPRINT                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ( file words 1 + )                                              VARIABLE fhandle                                                : >DOT  ( s - n)  COUNT '. -TRAILING<> NIP ;                    : +0  ( s)  COUNT + 0 SWAP C! ;                                 : ?+WNK  ( s)  DUP PUSH  >DOT NOT                                  IF  " .wnk" COUNT R@ S+!  THEN  POP +0 ;                     : FILENAME  ( $ - u)  0 RUB  TYPE$  PAD 1+ 78 ACCEPT               DUP PAD C! ;                                                 : PAD$>ARG$   PAD ARG$ SMOVE ;                                  : ?FILE   GETARG$  COUNT PEEL ?DUP                                 IF  0 ARG$ C!  ARG$ S+!                                         ELSE DROP  frame COLOR +CURSOR " Filename:"  FILENAME             IF  PAD$>ARG$  ELSE  BOW  BYE  THEN THEN                      ARG$ ?+WNK ;                                                 : BADNAME   " Couldn't make or save the file."  WARNING ;                                                                       ( file words 2 + )                                              : LINE>FILE  ( seg l#)  LINESPEC T>PAD  fhandle @ FILE-WRITE ;  : FSAVE  ( s)  FMAKE                                               IF  DROP BADNAME .FKEYS                                         ELSE  fhandle !                                                    TSEG 0  lend @ 1+                                               FOR  2DUP LINE>FILE  1+ NEXT  2DROP  fhandle @  FCLOSE       THEN ;                                                       : FILE-SAVE  ARG$ FSAVE ;                                       : ?FSAVE  ( c)  196 = IF FILE-SAVE ELSE                            BEEP  0 RUB ." Leaving Wink: save any changes (y/n)?" KEY       'BL OR 'y = IF FILE-SAVE THEN THEN ;                                                                                                                                                                                                                                                                                         ( file words 3 + )                                              : READ  ( unit# - handle#)  HANDLE @ DUP PUSH                      FILE-SIZE ABORT" FILE TOO BIG"  tsize !  R@ >BOF                BEGIN  PAD GULP R@ FILE-READ #BYTES-READ @ ?DUP                 WHILE  PUSH  CS@ PAD SPOT R@ LCMOVE  POP cnow +!                REPEAT  POP  cnow OFF ;                                      : NEW  ( unit# - handle#)  DUP MAKE  HANDLE @ ;                 : ?READ   ARG$ 3 TUCK UNIT DUP EXISTS?                             IF  READ  ELSE  NEW  THEN  FCLOSE ;                          : FILE   ?FILE  ?READ ;                                         : BACKUP   PAD 128 0 FILL                                          ARG$ PAD SMOVE  PAD >DOT ?DUP                                   IF 1- PAD C! THEN                                               " .bak" COUNT PAD S+!  PAD FSAVE ;                           : ?BACKUP  tsize @ IF BACKUP THEN ;                                                                                             ( >dos, ~name + )                                               ( shell words from L. Greg Lisle's CHANGES.SCR)                 : Cshell ( tail$)  " C:\COMMAND.COM"  SWAP shell ;              : LSHELL   $D00  PAD !  PAD Cshell ;                                                                                            : .DOS>   BOW  frame COLOR 0 RUB                                   ." Type EXIT and press Enter to return to Wink. " 0 0 (AT ;  : >DOS   .DOS>  LSHELL                                             0 0 AT  oldtop ON  .SCREEN .STATUSLINE ;                                                                                     : ~NAME   " New filename:" FILENAME                                IF  PAD ?+WNK  PAD FMAKE NIP                                       IF  BADNAME                                                     ELSE  PAD$>ARG$  ARG$ +0  .FILENAME FILE-SAVE  THEN THEN     .FKEYS ;                                                                                                                     ( ~line, ~colors + )                                            : ~LINEWIDTH   LINEWIDTH ELITE XOR                                 IF  ['] ELITE  ['] EMARGIN  ELSE  ['] PICA ['] PMARGIN  THEN    IS MARGIN  IS LINEWIDTH  MOTHER  wipe ON  FORMAT  .RULER ;                                                                   3 MODE ~LINE  ~LINEWIDTH ~LINEWIDTH BEEP                                                                                        : ~COLORS  text 2@ SWAP text 2!                                    .RULER  oldtop ON  wipe ON ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ( fkeys, shift-fkeys + )                                        CREATE FKEYS                                                     ] Find Next Swap Also ~Mark Cut Copy Paste Print [             : FKEY  ( c)  59 FKEYS Special ;                                                                                                CREATE SHIFT-FKEYS                                               ] >DOS  ~NAME  ~LINE    ~DISPLAY  BEEP                            BEEP  BEEP   ~COLORS  2Print    FILE-SAVE [                  : SHIFT-FKEY  ( c)   84 SHIFT-FKEYS Special ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ( .result + )                                                   CREATE CURSOR> 4 ALLOT                                          : WINDOW   TOP 0 BOTTOM 79 1 text @ ;                           : SCRUP   WINDOW SCROLL-UP  topline INCR                           BOTTOMLINE DUP  1- .start !  .end ! ;                        : SCROWN   WINDOW SCROLL-DOWN  topline DECR@ .start ! ;         : SCROLL?  ( row - row')                                          DUP BOTTOM > IF  SCRUP  DROP BOTTOM topline @ oldtop !  ELSE    DUP   TOP U< IF  SCROWN  1+  topline @ oldtop !  THEN THEN ;  : CURSOR!   cnow @ DUP lnow @ 1- 0 MAX C>L lnow N!                 DUP >ROW SCROLL?  -ROT LINE @ - col# N! LEFT +  CURSOR> 2! ; : ?FRAME   topline @ oldtop @ XOR                                  IF  topline @ .start !  lend @ .end !  THEN ;                : .RESULT   -CURSOR CURSOR!  ?FRAME  .TLINES .STATUS                CURSOR> 2@ AT +CURSOR ;                                                                                                     ( start + )                                                     : (c)   CLS 12 11 AT -CURSOR ." Wink v1.0  "                       ." Copyright 1994-7 Leo Wong.  All rights reserved." ;       : START   VIRGIN SEGS TAble                                        INIT-VIDEO  >DIRECT  ?MONO  text COLOR (c)                      FILE .SCREEN .STATUSLINE  FORMAT  .RESULT  ?BACKUP ;                                                                         ( process 1 + )                                                 : PROCESS>   0 wipe !  lnow @ lold N!                             1- topline @ oldtop N! lend @ CLAMP .start N! 1- .end ! ;                                                                                                                                                                                                                                                                                                                                                                                                     ( process 2 + )                                                 : PROCESS  ( c)  PROCESS>                                          DUP  'BL 126 BETWEEN IF  DUP CHARACTER  ELSE                    DUP              CR= IF  Enter          ELSE                    DUP              9 = IF  Tab            ELSE                    DUP              8 = IF  Backspace      ELSE  $80 XOR           DUP             83 = IF  Delete         ELSE                    DUP   71  81 BETWEEN IF  DUP CURKEY     ELSE                    DUP             82 = IF  Insert         ELSE                    DUP   59  68 BETWEEN IF  DUP FKEY       ELSE                    DUP  115 119 BETWEEN IF  DUP CTRL-CUR   ELSE                    DUP              4 = IF  Ctrl-PgUp      ELSE                    DUP   84  93 BETWEEN IF  DUP SHIFT-FKEY ELSE  BEEP              THEN THEN THEN THEN THEN THEN THEN THEN THEN THEN THEN          DROP ;                                                                                                                       ( wink + )                                                      : WINK   START                                                     BEGIN   KEY  DUP 196 =  OVER 231 =  OR NOT                      WHILE   PROCESS ?BLOCK  .RESULT                                 REPEAT  ?FSAVE BOW ;                                                                                                         : WINK-BOOT   WINK  BYE ;                                       : WINK-ABORT   >SCR +CURSOR BEEP                                   CR POP POP TYPE$                                                CR BYE ;